-- seckill_list.lua
local goodsId = ARGV[1]
local userId = ARGV[2]

-- Redis Key
local stockKey = "seckill:stock:" .. goodsId
local userSetKey = "seckill:success:users:" .. goodsId

-- 初始化返回结果表
local result = {}

-- 1. 判断库存并减库存
local stock = redis.call('DECR', stockKey)
if stock < 0 then
    -- 库存不足，恢复库存
    redis.call('INCR', stockKey)
    result[1] = tostring(-1)    -- 错误码（字符串）
    result[2] = "库存不足"       -- 错误消息
    result[3] = tostring(stock)  -- 当前库存（字符串）
    return result
end

-- 2. 判断用户是否已购买
local isMember = redis.call('SISMEMBER', userSetKey, userId)
if isMember == 1 then
    -- 用户已购买过，恢复库存
    redis.call('INCR', stockKey)
    result[1] = tostring(-2)    -- 错误码（字符串）
    result[2] = "用户已购买"      -- 错误消息
    result[3] = tostring(stock)  -- 当前库存（字符串）
    return result
end

-- 3. 添加用户到已购买集合
local addResult = redis.call('SADD', userSetKey, userId)
if addResult == 0 then
    -- 添加失败，恢复库存
    redis.call('INCR', stockKey)
    result[1] = tostring(-3)    -- 错误码（字符串）
    result[2] = "系统异常"       -- 错误消息
    result[3] = tostring(stock)  -- 当前库存（字符串）
    return result
end

-- 4. 成功返回
result[1] = tostring(1)        -- 成功码（字符串）
result[2] = "成功"             -- 成功消息
result[3] = tostring(stock)    -- 剩余库存（字符串）
return result